//package util;
//
//import com.rczs.common.config.FtpConfig;
//import com.rczs.common.config.YmlConfig;
//import com.rczs.common.constant.chat.MessageTypeEnum;
//import com.rczs.dto.system.FtpFileTreeDTO;
//import org.apache.commons.net.ftp.FTPClient;
//import org.apache.commons.net.ftp.FTPFile;
//import org.apache.commons.net.ftp.FTPReply;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.io.FileNotFoundException;
//import java.io.IOException;
//import java.io.InputStream;
//import java.net.SocketException;
//import java.util.Map;
//import java.util.Map.Entry;
//
//@Component
//public class FTPUtil {
//
//    private static Logger logger = LoggerFactory.getLogger(FTPUtil.class);
//
//    @Autowired
//    private FtpConfig ftpConfig;
//
//    @Autowired
//    private YmlConfig myConfig;
//
//    public FTPClient getFtpClient() {
//        FTPClient ftpClient = connectServer();
//        return ftpClient;
//    }
//
//    /**
//     * 关闭连接
//     */
//    public void closeConnect(FTPClient ftpClient) {
//        try {
//            if (ftpClient != null) {
//                ftpClient.logout();
//                ftpClient.disconnect();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 连接ftp服务器
//     *
//     * @return
//     */
//    public FTPClient connectServer() {
//        try {
//            FTPClient ftpClient = new FTPClient();
//            ftpClient.connect(ftpConfig.getHost(), ftpConfig.getPort());// 连接FTP服务器
//            ftpClient.login(ftpConfig.getUsername(), ftpConfig.getPassword());// 登陆FTP服务器
//            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
//                logger.info("未连接到FTP，用户名或密码错误。");
//                ftpClient.disconnect();
//            } else {
//                ftpClient.setControlEncoding("GBK"); // 中文支持
//                ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//                ftpClient.setBufferSize(1024);
//                logger.info("FTP连接成功。");
//                return ftpClient;
//            }
//        } catch (SocketException e) {
//            e.printStackTrace();
//            logger.info("FTP的IP地址可能错误，请正确配置。");
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.info("FTP的端口错误,请正确配置。");
//        }
//        return null;
//    }
//
//    /**
//     * 下载文件 调用完该方法后，需调用closeConnect()方法来关闭连接
//     *
//     * @param ftpPath
//     * @param fileName
//     * @return
//     */
//    public InputStream readFileForFTP(String ftpPath, String fileName) {
//        InputStream in = null;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                ftpClient.enterLocalPassiveMode();
//                ftpClient.changeWorkingDirectory(gbktoiso(ftpPath));
//                in = ftpClient.retrieveFileStream(fileName);
//            }
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + ftpPath + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return in;
//    }
//
//    /**
//     * 上传文件
//     *
//     * @param ftpPath
//     * @param is
//     * @return
//     */
//    public boolean writeToFile(String ftpPath, InputStream is) {
//        boolean isOk = false;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                ftpClient.enterLocalPassiveMode();
//                int fileIndex = ftpPath.lastIndexOf("/");
//                if (fileIndex != -1) {
//                    ftpClient.changeWorkingDirectory(gbktoiso(ftpPath.substring(0, fileIndex)));
//                    isOk = ftpClient.storeFile(gbktoiso(ftpPath.substring(fileIndex + 1)), is);
//                    closeConnect(ftpClient);
//                }
//            }
//            is.close();
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + ftpPath + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return isOk;
//    }
//
//    /**
//     * 上传文件
//     *
//     * @param ftpPath
//     * @param fileName
//     * @param is
//     * @return
//     */
//    public boolean writeToFile(String ftpPath, String fileName, InputStream is) {
//        boolean isOk = false;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                ftpClient.enterLocalPassiveMode();
//                ftpClient.changeWorkingDirectory(gbktoiso(ftpPath));
//                isOk = ftpClient.storeFile(gbktoiso(fileName), is);
//                closeConnect(ftpClient);
//            }
//            is.close();
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + ftpPath + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return isOk;
//    }
//
//    /**
//     * 批量上传文件
//     *
//     * @param ftpPath
//     * @param isMap
//     * @return
//     */
//    public boolean writeToFile(String ftpPath, Map<String, InputStream> isMap) {
//        boolean isOk = false;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                ftpClient.enterLocalPassiveMode();
//                ftpClient.changeWorkingDirectory(gbktoiso(ftpPath));
//                if (isMap != null && isMap.size() > 0) {
//                    for (Entry<String, InputStream> entry : isMap.entrySet()) {
//                        InputStream is = entry.getValue();
//                        isOk = ftpClient.storeFile(gbktoiso(entry.getKey()), is);
//                        is.close();
//                    }
//                }
//                closeConnect(ftpClient);
//            } else {
//                if (isMap != null && isMap.size() > 0) {
//                    for (Entry<String, InputStream> entry : isMap.entrySet()) {
//                        InputStream is = entry.getValue();
//                        is.close();
//                    }
//                }
//            }
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + ftpPath + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return isOk;
//    }
//
//    /**
//     * 创建目录
//     *
//     * @param ftpPath
//     * @param dirName
//     * @return
//     */
//    public boolean createDir(String ftpPath, String dirName) {
//        boolean isOk = false;
//        FTPClient ftpClient = null;
//        try {
//            ftpClient = connectServer();
//            if (ftpClient != null) {
//                ftpClient.changeWorkingDirectory(gbktoiso(ftpPath));
//                isOk = ftpClient.makeDirectory(gbktoiso(dirName));
//                closeConnect(ftpClient);
//            }
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + ftpPath + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return isOk;
//    }
//
//    /**
//     * 文件列表
//     *
//     * @param ftpPath
//     * @return
//     */
//    public FTPFile[] listFiles(String ftpPath) {
//        FTPFile[] files = null;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                ftpClient.changeWorkingDirectory(gbktoiso(ftpPath));
//                files = ftpClient.listFiles();
//                closeConnect(ftpClient);
//            }
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + ftpPath + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return files;
//    }
//
//    public void ListFileTree(FTPClient ftpClient, String ftpPath, FtpFileTreeDTO dto) {
//        try {
//            if (ftpClient != null) {
//                boolean flag = ftpClient.changeWorkingDirectory(gbktoiso(ftpPath));
//                if (flag == true) {
//                    FTPFile[] files = ftpClient.listFiles();
//                    for (FTPFile file : files) {
//                        if (file != null) {
//                            FtpFileTreeDTO temp = null;
//                            if (file.isFile()) {
//                                temp = new FtpFileTreeDTO();
//                                temp.setFtpFile(file);
//                                temp.setDirectory(false);
//                            } else if (file.isDirectory()) {
//                                if (!".".equals(file.getName()) && !"..".equals(file.getName())) {
//                                    temp = new FtpFileTreeDTO();
//                                    temp.setFtpFile(file);
//                                    temp.setDirectory(true);
//                                    ListFileTree(ftpClient, ftpPath + "/" + file.getName(), temp);
//                                }
//                            }
//                            if (temp != null) dto.getChildren().add(temp);
//                        }
//                    }
//                }
//            }
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + ftpPath + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 删除目录
//     *
//     * @param pathname
//     * @return
//     */
//    public boolean deleteDirectory(String pathname) {
//        boolean isOk = false;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                isOk = ftpClient.removeDirectory(gbktoiso(pathname));
//                closeConnect(ftpClient);
//            }
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + pathname + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return isOk;
//    }
//
//    /**
//     * 删除文件
//     *
//     * @param pathname
//     * @return
//     */
//    public boolean deleteFile(String pathname) {
//        boolean isOk = false;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                isOk = ftpClient.deleteFile(gbktoiso(pathname));
//                closeConnect(ftpClient);
//            }
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + pathname + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return isOk;
//    }
//
//    /**
//     * 目录是否存在
//     *
//     * @param path
//     * @return
//     */
//    public boolean dirIsExist(String path) {
//        boolean isOk = false;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                isOk = ftpClient.changeWorkingDirectory(gbktoiso(path));
//                closeConnect(ftpClient);
//            }
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + path + "文件");
//            e.printStackTrace();
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//        }
//        return isOk;
//    }
//
//    /**
//     * 重命名
//     *
//     * @param from
//     * @param to
//     * @return
//     */
//    public boolean rename(String from, String to) {
//        boolean isOk = false;
//        try {
//            FTPClient ftpClient = connectServer();
//            if (ftpClient != null) {
//                isOk = ftpClient.rename(gbktoiso(from), gbktoiso(to));
//                closeConnect(ftpClient);
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return isOk;
//    }
//
//    /**
//     * 转码[GBK -> ISO-8859-1] 不同的平台需要不同的转码
//     *
//     * @param obj
//     * @return ""
//     */
//    public static String gbktoiso(Object obj) {
//        try {
//            if (obj == null)
//                return "";
//            else
//                return new String(obj.toString().getBytes("GBK"), "iso-8859-1");
//        } catch (Exception e) {
//            return "";
//        }
//    }
//
//
//    /*
//    * 文件转存（手机路径转ftp路径）
//    * @param mobilePath 手机路径
//    * @param prefix 路径前缀("Mobile/images 或 Mobile/audios")
//    * @param messageTypeEnum 消息类型
//    * @return ftp文件路径
//    * */
//    public String writeMobileFile2FtpFile(String fileName, MessageTypeEnum messageTypeEnum, InputStream is) {
//        String result = "";
//        if (StringUtils.isNotEmpty(fileName)) {
//            String savePath = "";
//            switch (messageTypeEnum) {
//                case AUDIO:
//                    savePath = myConfig.getMobileAudioPath();
//                    break;
//                case IMAGE:
//                    savePath = myConfig.getMobileImagePath();
//                    break;
//            }
//            result = savePath + "/" + fileName;
//            String ftpFilePath = myConfig.getFtpPath()+"/"+ result;
//            writeToFile(ftpFilePath, is);
//        }
//        return result;
//    }
//}
